
    if(true){
        // es6 let 存在块级作用域，相当于有一个门，外面无法访问到，所以报错
        let c = 0;
        var a = 123;
    }
    console.log(a); // 123
    //console.log(c); // Uncaught ReferenceError: c is not defined

    console.log(b); // undefined
    var b = '伊万卡'; // 变量提升

    // es6 不存在变量提升
    // console.log(d); // Uncaught ReferenceError: Cannot access 'd' before initialization
    let d = '伊能静';

    for(var i =0;i<5;i++){} // 不存在块级作用域，最后是5是因为，这段代码已经执行完了
    console.log(i);  // 5

    for(let j = 0;j<4;j++){} // let 声明的变量，存在块级作用域（） 和 {}，因此外面访问不到，
    //console.log(j); // Uncaught ReferenceError: j is not defined



    var tmp = 123;
    // 暂时性死区
    if (true) { // 2、let特性块级作用域申明的变量和这个块级作用域进行绑定，不受外部影响var，因此，会报错，初始化前不能访问
        //tmp = 'abc'; //1.不存在变量提升
        let tmp; 
    } 


    if (true) { 
        const dys = 10;
    }
    //console.log(dys); // dys is not defined

    // const dgq;

    const wy = '我叫无语';
    // wy = '我叫闭嘴'

    let [z, x, y,bb] = [1, 2, 3];
    // arrr[0]
    console.log(z)//1
    console.log(x)//2
    console.log(y)//3
    console.log(bb)


    let person = { name: 'zhangsan', age: 20 }; 
    let { name, age } = person;
    console.log(name); // 'zhangsan' 
    console.log(age); // 20


    // 函数
    function happy(){
        if(true){
            console.log('我很快乐')
        }
    }

    // es6 箭头函数
    () => {}
    var fnHappy = () => {
        if(true){
            console.log('我很快乐')
        }
    }
    fnHappy()


    function sum(num1,num2){
        return num1+num2
    }
    // 当你的代码块中只有一句话时可以省略 大括号
    // var sumNum = (num1,num2) => {
    //     return num1+num2
    // }
    var sumNum = (num1,num2) =>  num1+num2
    console.log(sumNum(1,2));


    // 形参只有一个可以省略（）
    function valDys(arg){
        console.log(arg)
    }

    var jtVal = arg => console.log(arg);

    jtVal('连绵的青山百里长');


    // var ageJt = 100;
    // var obj = {
    //     age:this.ageJt,
    //     ageJt: 20,
    //     say: function(){
    //         alert(this.ageJt)  // 20
    //     }
    // }
    // console.log(obj.age);  // 100
    // obj.say();

    // var ageJt = 100;
    // var obj = {
    //     ageJt: 20,
    //     say: () => alert(this.ageJt)  // 100
    // }
    // obj.say()


    const obj = { name: '张三'} 
    function fn () { 
        console.log(this); 
        return () => { 
            console.log(this); 
        } 
    } 
    // fn();
    // console.log(fn())
    // fn()();

    const resFn = fn.call(obj); 
    resFn();

    // 剩余参数
    function getData(num1,...num){
        console.log(num1);
        console.log(num)
    }
    getData(1,2,3,4,5,6);

    let zzArr = [1,2,3,4,5,6];
    console.log(zzArr);
    console.log(...zzArr);

    // 合并数组
    // 方法一 
    let ary1 = [1, 2, 3];
    let ary2 = [3, 4, 5];
    let ary3 = [...ary1, ...ary2];  // 扩展运算符和并数组
    console.log(ary3);
    // ary1.push(...ary2);  // 3 4 5
    ary1.push(ary2);
    console.log(ary1);

    let oDivs = document.getElementsByTagName('div'); 
    console.log(oDivs);
    console.log(...oDivs);

    let arrayLike = {
        '0': 'a',
        '1': 'b',
        '2': 'c',
        length: 3
    }; 
    console.log(arrayLike);
    console.log(Array.from(arrayLike));


    let arrayObj = [{
        id:1,
        name:'OBAMA'
    },{
        id:2,
        name:'Trump'
    }];
    // (itme,index) => { itme.id == 2}
    // let president = arrayObj.find(function(item,index){
    //     console.log(item);
    //     console.log(index);
    //     return item.id == 2
    // });
    let president = arrayObj.find((itme,index) => itme.id == 2);
    console.log(president);


    // let name = `我是女强人-菜阴文`;

    